Skip to main content

29 Socket协议基本原理

网络协议(Networking Protocol):一台机器将自己想要表达的内容,按照某种约定好的格式发送出去,另外一台机器收到这些信息后,能够按照约定好的格式解析出来,从而准确、可靠地获得发送方想要表达的内容。

网络分层

OSI 标准七层模型及 TCP/IP 模型:

网络环境过于复杂,服务器和设备各有各的体系,但都可以通过同一套网络协议栈通过切分成多个层次和组合,满足不同服务器和设备的通信需求。

物理层

数据链路层/MAC 层

每个网卡都有的唯一的硬件地址,但没有全局定位功能。

MAC 地址的定位功能局限在一个网络里,即同一个网络号下的 IP 地址,可以通过 MAC 进行定位和通信。IP 地址通过 ARP 协议获取 MAC 地址。跨网络通信,IP 地址保持不变,但 MAC 地址每经过一个路由器就换一次。

网络包在本地网络中的服务器之间定位及通信的机制。

网络层/IP 层

IP 地址:192.168.1.100/24,斜杠前面是 IP 地址,被点分隔为四个部分,每个部分 8 位总 32 位。斜线后面 24 指前 24 位是网络号,后 8 位是主机号,有全局定位功能。

网络包从一个起始的 IP 地址,沿着路由协议解析的路径,经过多个网络,通过多次路由器转发,到达目标 IP 地址。

传输层

IP 层仅负责数据从一个 IP 地址发送给另一个 IP 地址,丢包、乱序、重传、拥塞等问题都在传输层的 TCP 协议里处理。

应用层

HTTP

Socket

二层到四层在 Linux 内核里处理,应用层(浏览器、Nginx、Tomcat) 都是用户态。内核里面对于网络包的处理不区分应用。

第四层往上需要区分网络包发给哪个应用。在传输层的 TCP 和 UDP 协议里有端口的概念,不同的应用监听不同的端口。例如服务端 Nginx 监听 80、Tomcat 监听 8080,客户端浏览器和 FTP 客户端分别监听一个随机端口。

应用层和内核互通的机制通过 Socket 系统调用。

发送数据包